#include "connectpage.h"
#include "ui_connectpage.h"
#include "QDebug"

#include "GReader.h"
#include "message.h"
#include "delegate.h"

#include "mainwindow.h"
#include "qmessagebox.h"

/********自定义回调函数*************************************************************/
ConnectPage *ConnectPage::myPage = NULL ;     //它在内存中只占一份空间
int ConnectPage::DevConnectState = Disconnected;
void __stdcall ConnectPage::TcpDisconnecte(char *msg)
{
    ConnectPage::DevConnectState = Disconnected;

    qDebug("断开连接回调");
}

void __stdcall ConnectPage::TagEpcLog(char* readerName, LogBaseEpcInfo msg)
{
    qDebug("读取到EPC信息回调");
    //qDebug() << "msg:" << (char*)msg.Epc;
    //qDebug() << "Userdata:" << (char*)msg.Userdata;
    /* 想办法将读取到的数据在主页面上显示出来    现在在一个全局的回调，全局回调可以将收到的数据通过emit发送给主页面，主页面进行处理 */
    /* 将信号先传给ConnectPage ，ConnectPage将信号再将信号发射出去，这样的话接受放才可以知道要从哪个对象那里接收信号*/
    emit myPage->ReadTagRetuenData(msg);
}
/*********************************************************************/

ConnectPage::ConnectPage(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ConnectPage)
{
    ui->setupUi(this);

    myPage = this;
}

ConnectPage::~ConnectPage()
{
    Close(gclient);
    delete ui;
}

//创建连接时，信息输入完毕后点击确认按键
void ConnectPage::on_confirm_button_clicked()
{
    // 获取下拉框的选择，根据选项进行不同的操作
    // 获取输入框输入的信息
    QString IP_Address = ui->IP_Address->text();
    qDebug() << "输入IP信息：" << IP_Address.toUtf8();

    //使用库函数创建与阅读器的TCP连接
    if(gclient!=NULL)
    {
        //Close(gclient);//设备不为空时，可能处于连接状态，断开连接重新连接
        gclient = NULL;
    }
    /* 如果阅读器被其他上位机占用时，检测不到，会显示连接成功，但是发送数据会失败 */
    gclient = OpenTcp(IP_Address.toUtf8(), 100);
    if(gclient==NULL)
    {
        QMessageBox::about(this,"连接状态","连接失败");
        return;
    }
    ConnectPage::DevConnectState = Connected;
    QMessageBox::about(this,"连接状态","连接成功");

    /* 消息弹窗 */
    RegCallBack(gclient, ETcpDisconnected  ,  (void *)ConnectPage::TcpDisconnecte);//断开TCP连接
    RegCallBack(gclient, ETagEpcLog, (void *)ConnectPage::TagEpcLog);//读取到EPC信息

    MsgBaseStop stop;
    memset(&stop, 0, sizeof(stop));//把停止地址里的内容清零
    /* 判断是否发送停止成功，成功后隐藏页面 */

    if(gclient->isOpened == true){

        qDebug() << "connect ok";/* 隐藏 */
        hide();
        SendSynMsg(gclient, EMESS_BaseStop, &stop);//只是发送停止指令
    }else
    {
        qDebug() << "connect error";
    }

}

int ConnectPage::GetConnectState(void)
{
    return ConnectPage::DevConnectState == Connected?Connected:Disconnected;
}
